package baseObject;

public class Ball extends RectObj implements IBall{
	private int speed;
	private int deltaX;
	private int deltaY;
	
	/**
	 * Crée une balle de coordonnées <param>x</param> et <param>y</param>
	 * On rappel que l'axe est inversé.
	 * @param x : position sur l'axe des abscisses
	 * @param y : position sur l'axe des ordonnées
	 */
	public Ball(int x, int y, int width, int height) {
		super(x, y, width, height);
		this.speed = 1;
		this.deltaX = 1;
		this.deltaY = 1;
	}

	/**
	 * Permet de spécifier le sens de déplacement en horizontal et vertical.
	 * @param deltaX : 1 pour vers le droite, -1 pour vers la gauche
	 * @param deltaY : 1 pour vers le bas, -1 pour vers le haut
	 */
	public void setDirection(int deltaX,int deltaY){
		this.deltaX = deltaX;
		this.deltaY = deltaY;
	}
	
	/**
	 * Inverse le sens de déplacement en horizontal ou en vertical.
	 * @param inX : spécifie si on doit inverser horizontalement
	 * @param inY : spécifie si on doit inverser verticalement
	 * @return : rien.
	 */
	public void invertDirection(boolean inX,boolean inY){
		if(inX)
			this.deltaX = -this.deltaX;
		if(inY)
			this.deltaY = -this.deltaY;
	}

	/**
	 * Fais bouger la balle au bon endroit en fonction de la vitesse courante
	 * et des coordonnées courantes.
	 */
	public void move(){
		super.setCoord(super.getX() + this.deltaX, super.getY() + this.deltaY);
	}
	
	/**
	 * Retourne le sens de déplacement en X.
	 * @return -1 pour "vers la gauche", +1 pour "vers la droite"
	 */
	public int getDeltaX() {
		return this.deltaX;
	}

	/**
	 * Retourne le sens de déplacement en Y.
	 * @return -1 pour "vers le haut", et +1 pour "vers le bas".
	 */
	public int getDeltaY() {
		return this.deltaY;
	}

	/**
	 * Renvoi la vitesse courante de la balle.
	 * @return la vitesse
	 */
	@Override
	public int getSpeed() {
		return this.speed;
	}

	/**
	 * Modifie la vitesse courante de la balle.
	 */
	public void setSpeed(int speed){
		this.speed = speed;
	}
	


	/**
	 * Permet de cloner la balle
	 */

	public Object cloneObj(){
	    Ball b = new Ball(this.getX(), this.getY(), this.getWidth(), this.getHeight());
	    b.setSpeed(this.getSpeed());
	    b.deltaX = this.deltaX;
	    b.deltaY = this.deltaY;
	    return b;
	}
}
